import moment from "moment"

import type { PlasmoMessaging } from "@plasmohq/messaging"

// 实例数据
let wxLiveScreenData = {}

// 更新数据
const updateLiveScreenData = (data: object) => {
  wxLiveScreenData = {
    ...wxLiveScreenData,
    ...data
  }
}

/**
 *  数据Filter定义
 */
// 基础信息过滤
const baseInfoFilter = (url: string, data: any) => {
  // url匹配关键字
  const keyword = "get_ec_conversion_dashboard_data_v3"
  // 跳过非匹配请求
  if (!url.includes(keyword)) return
  // 数据处理
  const _data = data?.data || {}
  const _overviewData = _data["overview"] || {}
  // 更新数据
  const _updateData = {
    // 直播间名称
    live_room: _data["anchorNickname"] || "",
    // 开播时间
    live_start_time: moment
      .unix(Number(_data["createTime"]))
      .format("YYYY-MM-DD HH:mm:ss"),
    // 是否直播结束
    live_end: !_data["isLiving"],
    // 累计观看次数
    live_pv: Number(_overviewData["cumulativeWatchPv"] || 0),
    // 累计观看人数
    live_uv: Number(_overviewData["cumulativeWatchUv"] || 0),
    // 人均观看时长
    live_viewtime: Number(_overviewData["averageWatchSecondsPerAudience"] || 0),
    // 新增粉丝数据
    live_addfensi: Number(_overviewData["cumulativeNewFollowUv"] || 0)
  }
  // 更新到全局变量
  updateLiveScreenData(_updateData)
}

// 直播间运营数据处理
const ecDataFilter = (url: string, data: any) => {
  // url匹配关键字
  const keyword = "get_live_ec_data_summary"
  // 跳过非匹配请求
  if (!url.includes(keyword)) return
  // 数据处理
  const _data = data?.data || {}
  let gmv = Number(_data["totalGmv"] || 0)
  gmv = gmv > 0 ? Number((gmv / 100).toFixed(2)) : 0
  // 更新数据
  const _updateData = {
    // 累计成交金额
    live_sale_amount: gmv,
    // 成交人数
    live_sale_count: Number(_data["totalPayUv"] || 0),
    // 成交件数
    deal_count: Number(_data["totalPayPv"] || 0),
    // 成交老粉数
    live_sale_old_fans:
      Number(_data["totalPayUv"] || 0) - Number(_data["newBuyerUv"] || 0)
  }
  // 更新到全局变量
  updateLiveScreenData(_updateData)
}

const handler: PlasmoMessaging.PortHandler = async (req, res) => {
  // const { url, response, action } = req.body
  const { url, response, action } = req.body
  if (action === "init") {
    wxLiveScreenData = {}
  } else {
    const filters = [baseInfoFilter, ecDataFilter]
    filters.forEach((filter) => filter(url, response))
    // console.log("Received URL:", url)
    // console.log("Received Response:", response)
  }
  // console.log("Live Screen Data:", wxLiveScreenData)
  res.send(wxLiveScreenData)
}

export default handler
